home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / encodings / idna.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  6KB  |  256 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import stringprep
  5. import re
  6. import codecs
  7. from unicodedata import ucd_3_2_0 as unicodedata
  8. dots = re.compile(u'[.\xe3\x80\x82\xef\xbc\x8e\xef\xbd\xa1]')
  9. ace_prefix = 'xn--'
  10. uace_prefix = unicode(ace_prefix, 'ascii')
  11.  
  12. def nameprep(label):
  13.     newlabel = []
  14.     for c in label:
  15.         if stringprep.in_table_b1(c):
  16.             continue
  17.         
  18.         newlabel.append(stringprep.map_table_b2(c))
  19.     
  20.     label = u''.join(newlabel)
  21.     label = unicodedata.normalize('NFKC', label)
  22.     for c in label:
  23.         if stringprep.in_table_c12(c) and stringprep.in_table_c22(c) and stringprep.in_table_c3(c) and stringprep.in_table_c4(c) and stringprep.in_table_c5(c) and stringprep.in_table_c6(c) and stringprep.in_table_c7(c) and stringprep.in_table_c8(c) or stringprep.in_table_c9(c):
  24.             raise UnicodeError('Invalid character %r' % c)
  25.             continue
  26.     
  27.     RandAL = map(stringprep.in_table_d1, label)
  28.     for c in RandAL:
  29.         if c:
  30.             if filter(stringprep.in_table_d2, label):
  31.                 raise UnicodeError('Violation of BIDI requirement 2')
  32.             
  33.             if not RandAL[0] or not RandAL[-1]:
  34.                 raise UnicodeError('Violation of BIDI requirement 3')
  35.             
  36.         not RandAL[-1]
  37.     
  38.     return label
  39.  
  40.  
  41. def ToASCII(label):
  42.     
  43.     try:
  44.         label = label.encode('ascii')
  45.     except UnicodeError:
  46.         pass
  47.  
  48.     if len(label) < len(label):
  49.         pass
  50.     elif len(label) < 64:
  51.         return label
  52.     
  53.     raise UnicodeError('label empty or too long')
  54.     label = nameprep(label)
  55.     
  56.     try:
  57.         label = label.encode('ascii')
  58.     except UnicodeError:
  59.         0
  60.         0
  61.     except:
  62.         0
  63.  
  64.     if len(label) < len(label):
  65.         pass
  66.     elif len(label) < 64:
  67.         return label
  68.     
  69.     raise UnicodeError('label empty or too long')
  70.     if label.startswith(uace_prefix):
  71.         raise UnicodeError('Label starts with ACE prefix')
  72.     
  73.     label = label.encode('punycode')
  74.     label = ace_prefix + label
  75.     if len(label) < len(label):
  76.         pass
  77.     elif len(label) < 64:
  78.         return label
  79.     
  80.     raise UnicodeError('label empty or too long')
  81.  
  82.  
  83. def ToUnicode(label):
  84.     if isinstance(label, str):
  85.         pure_ascii = True
  86.     else:
  87.         
  88.         try:
  89.             label = label.encode('ascii')
  90.             pure_ascii = True
  91.         except UnicodeError:
  92.             pure_ascii = False
  93.  
  94.     if not pure_ascii:
  95.         label = nameprep(label)
  96.         
  97.         try:
  98.             label = label.encode('ascii')
  99.         except UnicodeError:
  100.             raise UnicodeError('Invalid character in IDN label')
  101.         except:
  102.             None<EXCEPTION MATCH>UnicodeError
  103.         
  104.  
  105.     None<EXCEPTION MATCH>UnicodeError
  106.     if not label.startswith(ace_prefix):
  107.         return unicode(label, 'ascii')
  108.     
  109.     label1 = label[len(ace_prefix):]
  110.     result = label1.decode('punycode')
  111.     label2 = ToASCII(result)
  112.     if label.lower() != label2:
  113.         raise UnicodeError('IDNA does not round-trip', label, label2)
  114.     
  115.     return result
  116.  
  117.  
  118. class Codec(codecs.Codec):
  119.     
  120.     def encode(self, input, errors = 'strict'):
  121.         if errors != 'strict':
  122.             raise UnicodeError('unsupported error handling ' + errors)
  123.         
  124.         if not input:
  125.             return ('', 0)
  126.         
  127.         result = []
  128.         labels = dots.split(input)
  129.         if labels and len(labels[-1]) == 0:
  130.             trailing_dot = '.'
  131.             del labels[-1]
  132.         else:
  133.             trailing_dot = ''
  134.         for label in labels:
  135.             result.append(ToASCII(label))
  136.         
  137.         return ('.'.join(result) + trailing_dot, len(input))
  138.  
  139.     
  140.     def decode(self, input, errors = 'strict'):
  141.         if errors != 'strict':
  142.             raise UnicodeError('Unsupported error handling ' + errors)
  143.         
  144.         if not input:
  145.             return (u'', 0)
  146.         
  147.         if isinstance(input, unicode):
  148.             labels = dots.split(input)
  149.         else:
  150.             input = str(input)
  151.             unicode(input, 'ascii')
  152.             labels = input.split('.')
  153.         if labels and len(labels[-1]) == 0:
  154.             trailing_dot = u'.'
  155.             del labels[-1]
  156.         else:
  157.             trailing_dot = u''
  158.         result = []
  159.         for label in labels:
  160.             result.append(ToUnicode(label))
  161.         
  162.         return (u'.'.join(result) + trailing_dot, len(input))
  163.  
  164.  
  165.  
  166. class IncrementalEncoder(codecs.BufferedIncrementalEncoder):
  167.     
  168.     def _buffer_encode(self, input, errors, final):
  169.         if errors != 'strict':
  170.             raise UnicodeError('unsupported error handling ' + errors)
  171.         
  172.         if not input:
  173.             return ('', 0)
  174.         
  175.         labels = dots.split(input)
  176.         trailing_dot = u''
  177.         if labels:
  178.             if not labels[-1]:
  179.                 trailing_dot = '.'
  180.                 del labels[-1]
  181.             elif not final:
  182.                 del labels[-1]
  183.                 if labels:
  184.                     trailing_dot = '.'
  185.                 
  186.             
  187.         
  188.         result = []
  189.         size = 0
  190.         for label in labels:
  191.             result.append(ToASCII(label))
  192.             if size:
  193.                 size += 1
  194.             
  195.             size += len(label)
  196.         
  197.         result = '.'.join(result) + trailing_dot
  198.         size += len(trailing_dot)
  199.         return (result, size)
  200.  
  201.  
  202.  
  203. class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
  204.     
  205.     def _buffer_decode(self, input, errors, final):
  206.         if errors != 'strict':
  207.             raise UnicodeError('Unsupported error handling ' + errors)
  208.         
  209.         if not input:
  210.             return (u'', 0)
  211.         
  212.         if isinstance(input, unicode):
  213.             labels = dots.split(input)
  214.         else:
  215.             input = str(input)
  216.             unicode(input, 'ascii')
  217.             labels = input.split('.')
  218.         trailing_dot = u''
  219.         if labels:
  220.             if not labels[-1]:
  221.                 trailing_dot = u'.'
  222.                 del labels[-1]
  223.             elif not final:
  224.                 del labels[-1]
  225.                 if labels:
  226.                     trailing_dot = u'.'
  227.                 
  228.             
  229.         
  230.         result = []
  231.         size = 0
  232.         for label in labels:
  233.             result.append(ToUnicode(label))
  234.             if size:
  235.                 size += 1
  236.             
  237.             size += len(label)
  238.         
  239.         result = u'.'.join(result) + trailing_dot
  240.         size += len(trailing_dot)
  241.         return (result, size)
  242.  
  243.  
  244.  
  245. class StreamWriter(Codec, codecs.StreamWriter):
  246.     pass
  247.  
  248.  
  249. class StreamReader(Codec, codecs.StreamReader):
  250.     pass
  251.  
  252.  
  253. def getregentry():
  254.     return codecs.CodecInfo(name = 'idna', encode = Codec().encode, decode = Codec().decode, incrementalencoder = IncrementalEncoder, incrementaldecoder = IncrementalDecoder, streamwriter = StreamWriter, streamreader = StreamReader)
  255.  
  256.